<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

require_once APPLICATION_PATH . '/models/Mapper/BaseMapper.php';

/**
 * Description of OrdenesDeServicioMapper
 *
 * @author kristian
 */
class Spalm_Model_Mapper_OrdenesDeServicioMapper extends Spalm_Model_Mapper_BaseMapper {

    public function save($ordenDeServicio)
    {

        if (!($ordenDeServicio instanceof Spalm_Model_Single_OrdenDeServicioEntity)){
            throw new TipoIncorrectoException('No es una orden de servicio');
        }

        $data = array(
            'cliente_id' => $ordenDeServicio->getCliente()->getPK(),
            'estado_id' => $ordenDeServicio->getEstado()->getPK(),
            'descripcion_equipos' => $ordenDeServicio->getDescripcionEquipos(),
            'detalle_fallas_informadas' => $ordenDeServicio->getDetalleFallasInformadas(),
            'servicios_realizados' => $ordenDeServicio->getServiciosRealizados()
        );

        $id = $ordenDeServicio->getPK();

        // si no tiene id
        // (se creo un nuevo clienteEntity y se le asignaron valores)
        if (null === $id) {
            // se evita el id (ya que no existe)
            unset($data['id']);
            // se inserta en la base de datos
            $this->getDbTable()->insert($data);

        } else {    // si tiene su id (se habia recuperado de la base de datos)
            // se actualiza el contenido de la base de datos
            $this->getDbTable()->update($data, array('id = ?' => $id));
        }
    }

    public function find($id,$ordenDeServicio )
    {

        if (!($ordenDeServicio instanceof Spalm_Model_Single_OrdenDeServicioEntity)){
            throw new TipoIncorrectoException('No es una orden de servicio');
        }

        if (!isset ($ordenDeServicio)){
            $ordenDeServicio = new Spalm_Model_Single_OrdenDeServicioEntity();
        }

        $result = $this->getDbTable()->find($id);
        if (0 == count($result)) {
            return;
        }
        $row = $result->current();

        $estadoModel = new Spalm_Model_Single_EstadoOrdenDeServicioEntity();
        $estado = $estadoModel->find($row->estado_id);

        $clienteModel = new Spalm_Model_Single_ClienteEntity();
        $cliente = $clienteModel->find($row->cliente_id);

        $ordenDeServicio->setPK($row->id);
        $ordenDeServicio->setCliente($cliente);
        $ordenDeServicio->setEstado($estado);
        $ordenDeServicio->setDescripcionEquipos($row->descripcion_equipos);
        $ordenDeServicio->setDetalleFallasInformadas($row->detalle_fallas_informadas);
        $ordenDeServicio->setServiciosRealizados($row->servicios_realizados);
    }

    public function fetchAll($where = null)
    {
        $resultSet = $this->getDbTable()->fetchAll($where);
        $entries   = array();

        foreach ($resultSet as $row) {
            $ordenDeServicio = new Spalm_Model_Single_OrdenDeServicioEntity();


            $estadoModel = new Spalm_Model_Single_EstadoOrdenDeServicioEntity();
            $estado = $estadoModel->find($row->estado_id);

            $clienteModel = new Spalm_Model_Single_ClienteEntity();
            $cliente = $clienteModel->find($row->cliente_id);

            $ordenDeServicio->setPK($row->id);
            $ordenDeServicio->setCliente($cliente);
            $ordenDeServicio->setEstado($estado);
            $ordenDeServicio->setDescripcionEquipos($row->descripcion_equipos);
            $ordenDeServicio->setDetalleFallasInformadas($row->detalle_fallas_informadas);
            $ordenDeServicio->setServiciosRealizados($row->servicios_realizados);
            $ordenDeServicio->setMapper($this);

            $entries[] = $ordenDeServicio;
        }
        return $entries;
    }
}
?>
